package com.qf.service.impl;

import com.qf.mapper.DtsStorageMapper;
import com.qf.pojo.DtsStorage;
import com.qf.service.DtsStorageService;
import com.qf.util.AliyunOSSUtil;
import com.qf.util.UUID;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * @author lixu
 */
@Service
public class DtsStorageServiceImpl implements DtsStorageService {

    /**
     * #服务器地址, 我选择的是华北2-北京地址如下
     * aliyun.oss.endpoint=http://oss-cn-beijing.aliyuncs.com
     * #子账户名称
     * aliyun.oss.accessKeyId=LTAI5tFV4k63m4XTzw58JBXM
     * #子账户密码
     * aliyun.oss.accessKeySecret=ThkGPyiqV9DIAmGWIjQ3TzaLMYbJHC
     * #自己创建的桶的名字, 下面这个改成自己的桶的名字
     * aliyun.oss.bucketName=gp14-file
     */

    @Value("${aliyun.oss.endpoint}")
    private String endpoint;
    @Value("${aliyun.oss.accessKeyId}")
    private String accessKeyId;
    @Value("${aliyun.oss.accessKeySecret}")
    private String accessKeySecret;
    @Value("${aliyun.oss.bucketName}")
    private String bucketName;

    @Autowired
    private DtsStorageMapper dtsStorageMapper;
    /**
     * 上传文件
     * @return
     *      * byte数组格式上传文件并返回上传后的URL地址
     *      * @param endpoint          OSS对外服务的访问域名
     *      * @param accessKeyId       accessKey账号
     *      * @param accessKeySecret   accessKey密码
     *      * @param bucketName        桶名字
     *      * @param objectName        完整文件名, 例如abc/efg/123.jpg  文件的唯一索引名称 文件的名称
     *      * @param content           文件内容, byte数组格式
     *      * @Author zhaojian
     */
    @Override
    public DtsStorage create(byte[] file, String originalFilename, long size) throws Exception{
        //扩展名
        String ext = FilenameUtils.getExtension(originalFilename);
        //UUID
        String fileName = UUID.randomUUID().toString().replaceAll("-","") + "." + ext;
        //时间戳 + 随机数
        //文件的名称 (防止重复）
        //1:上传到阿里云服务器 （OSS 对象存储服务）
        String path = AliyunOSSUtil.uploadImage(
                endpoint,
                accessKeyId,
                accessKeySecret,
                bucketName,
                fileName ,
                file
                );
        //2:将上面的返回值路径保存在Mysql数据库表中 dts_storage
        DtsStorage dtsStorage = new DtsStorage();
        //Key 例如abc/efg/123.jpg
        dtsStorage.setKey(fileName);
        dtsStorage.setName(fileName);
        //type
        dtsStorage.setType(ext);
        //大小
        dtsStorage.setSize(size);
        // url
        dtsStorage.setUrl(path);
        dtsStorage.setAddTime(new Date());
        dtsStorage.setUpdateTime(new Date());
        dtsStorage.setDeleted(false);
        dtsStorageMapper.insert(dtsStorage);
        return dtsStorage;
    }
}
